/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Repositories;

import Model.ItemModel;
import Model.VendaModel;
import Util.Conexao;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author Contagem
 */
public class VendaRepository {
    
    StringBuilder strSql;
    
    public VendaRepository()
    {
        
    }
    
    public boolean Salvar(VendaModel venda, ArrayList<ItemModel> itens)
    {
        try
        {
            int IdVenda = 0;
            
            strSql = new StringBuilder();
            Conexao.IniciarConexao();
            
            strSql.append("INSERT INTO venda(VENDA_DT_CADASTRO,VENDA_MESA,VENDA_VALOR,VENDA_STATUS) values ");
            strSql.append("('"+venda.getVENDA_DT_CADASTRO()+"',"+venda.getVENDA_MESA()+","+venda.getVENDA_VALOR()+",'"+venda.getVENDA_STATUS()+"')");
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            strSql.delete(0, strSql.length());
            
            Conexao.rs = Conexao.stmt.executeQuery("select VENDA_ID from venda order by VENDA_ID desc");
            while(Conexao.rs.next())
            {
                IdVenda = Integer.parseInt(Conexao.rs.getString("VENDA_ID"));
                break;
            }
            
            if(itens != null)
            {
                for(ItemModel item: itens)
                {
                    strSql.append("insert into item(VENDA_ID,ITEM_DESCRICAO,ITEM_VALOR,ITEM_QUANTIDADE) ");
                    strSql.append("values ("+IdVenda+",'"+item.getITEM_DESCRICAO()+"',"+item.getITEM_VALOR()+",");
                    strSql.append(""+item.getITEM_QUANTIDADE()+")");
                    
                    Conexao.stmt.executeUpdate(strSql.toString());
                    
                    strSql.delete(0, strSql.length());
                }
            }
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null,ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
        
    }
    
    
    public boolean Alterar(VendaModel venda, ArrayList<ItemModel> itens)
    {
        try
        {
            int IdVenda = 0;
            
            strSql = new StringBuilder();
            Conexao.IniciarConexao();
            
            strSql.append("UPDATE venda SET VENDA_MESA = "+venda.getVENDA_MESA()+",");
            strSql.append("VENDA_VALOR = "+venda.getVENDA_VALOR()+",VENDA_STATUS = 'A' ");
            strSql.append("where VENDA_ID = "+venda.getVENDA_ID()+"");
            
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            strSql.delete(0, strSql.length());
            
            strSql.append("delete from item where venda_id = "+venda.getVENDA_ID()+"");
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            strSql.delete(0, strSql.length());
            
            if(itens != null)
            {
                for(ItemModel item: itens)
                {
                    strSql.append("insert into item(VENDA_ID,ITEM_DESCRICAO,ITEM_VALOR,ITEM_QUANTIDADE) ");
                    strSql.append("values ("+venda.getVENDA_ID()+",'"+item.getITEM_DESCRICAO()+"',"+item.getITEM_VALOR()+",");
                    strSql.append(""+item.getITEM_QUANTIDADE()+")");
                    
                    Conexao.stmt.executeUpdate(strSql.toString());
                    
                    strSql.delete(0, strSql.length());
                }
            }
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null,ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
        
    }
    
    public boolean Deletar(int IdVenda)
    {
        try
        {
            strSql = new StringBuilder();
            
            Conexao.IniciarConexao();
            
            
            strSql.append("DELETE FROM venda WHERE VENDA_ID = "+IdVenda+" ");
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
    }
    
    public ArrayList<VendaModel> ListadeVendas() throws Exception
    {
        try
        {
            ArrayList<VendaModel> vendas = new ArrayList<VendaModel>();
            
            Conexao.IniciarConexao();
            
            Conexao.rs = Conexao.stmt.executeQuery("select * from venda where venda_status = 'A'");
            while(Conexao.rs.next())
            {
                VendaModel venda = new VendaModel();
                venda.setVENDA_ID(Integer.parseInt(Conexao.rs.getString("VENDA_ID")));
                venda.setVENDA_MESA(Integer.parseInt(Conexao.rs.getString("VENDA_MESA")));
                venda.setVENDA_VALOR(Double.parseDouble(Conexao.rs.getString("VENDA_VALOR")));
                vendas.add(venda);
            }
            
            return vendas;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
        
    }
    
    
    public ArrayList<VendaModel> ListadeVendas(Date dataInicial,Date dataFinal) throws Exception
    {
        try
        {
            strSql = new StringBuilder();
            
            ArrayList<VendaModel> vendas = new ArrayList<VendaModel>();
            
            Conexao.IniciarConexao();
            
            strSql.append("select * from venda where venda_status = 'B' AND ");
            strSql.append("venda_dt_cadastro between '"+dataInicial+"' AND '"+dataFinal+"' ");
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            
            while(Conexao.rs.next())
            {
                VendaModel venda = new VendaModel();
                venda.setVENDA_ID(Integer.parseInt(Conexao.rs.getString("VENDA_ID")));
                venda.setVENDA_MESA(Integer.parseInt(Conexao.rs.getString("VENDA_MESA")));
                venda.setVENDA_VALOR(Double.parseDouble(Conexao.rs.getString("VENDA_VALOR")));
                venda.setVENDA_DT_CADASTRO((Conexao.rs.getString("VENDA_DT_CADASTRO")));
                vendas.add(venda);
            }
            
            return vendas;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
        
    }
    
    public boolean EfetuarVenda(int IdVenda)
    {
        try {
            strSql = new StringBuilder();

            Conexao.IniciarConexao();

            strSql.append("UPDATE venda SET VENDA_STATUS = 'B'");
            
            strSql.append("WHERE VENDA_ID = " + IdVenda + " ");

            Conexao.stmt.executeUpdate(strSql.toString());


            return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        } finally {
            strSql = null;
            Conexao.FecharConexao();
        }
    }
    
    public boolean DeletarItens(int IdVenda)
    {
        try {
            strSql = new StringBuilder();

            Conexao.IniciarConexao();

            strSql.append("delete from item where venda_id = "+IdVenda+"");
            
            Conexao.stmt.executeUpdate(strSql.toString());


            return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        } finally {
            strSql = null;
            Conexao.FecharConexao();
        }
    }
    
 public ArrayList<ItemModel> ListadeItens(int IdVenda) throws Exception
    {
        try
        {
            ArrayList<ItemModel> itens = new ArrayList<ItemModel>();
            
            Conexao.IniciarConexao();
            
            Conexao.rs = Conexao.stmt.executeQuery("select * from item where venda_id = "+IdVenda+"");
            while(Conexao.rs.next())
            {
                ItemModel item = new ItemModel();
                item.setITEM_DESCRICAO(Conexao.rs.getString("ITEM_DESCRICAO"));
                item.setITEM_QUANTIDADE(Integer.parseInt(Conexao.rs.getString("ITEM_QUANTIDADE")));
                item.setITEM_VALOR(Double.parseDouble(Conexao.rs.getString("ITEM_VALOR")));
                itens.add(item);
            }
            
            return itens;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
        
    }   
}
